<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="swiper">
    <div class="swiper-slide">1</div>
    <div class="swiper-slide">2</div>
    <div class="swiper-slide">3</div>
  </div>

  <script>


    // const swiper = document.querySelector('.swiper')


    // 工厂模式: 可以解决创建重复对象的问题
    // 缺点：无法解决对象识别的问题（即怎样知道一个对象的类型）
    // function createTv(name, width, height, color) {
    //   const tv = {
    //     name: name,
    //     width: width,
    //     height: height,
    //     color: 'color'
    //   }
    //   return tv
    // }

    // const tv1 = createTv('小米电视', '100', '200','red')
    // const tv2 = createTv('华为电视', '400', '200','green')
    // const tv3 = createTv('三星电视', '300', '200','blue')

    // console.log(tv1)

    // function createPhone(name, size, color) {
    //   const phone = {
    //     name: name,
    //     size: size,
    //     color: color
    //   }
    //   return phone
    // }

    // const phone1 = createPhone('小米手机', '100','red')
    // console.log(phone1)
    

    // 构造函数模式：解决了对象识别的问题
    // 缺点：每个方法都要在每个实例上重新创建一遍
    // 构造函数
    // function Tv(name, width, height, color) { 
    //   this.name = name
    //   this.width = width
    //   this.height = height
    //   this.color = color
    //   this.start = function () {
    //     console.log('电视开机')
    //   }
    // }

    // // 实例对象
    // const tv1 = new Tv('小米电视', '100', '200','red')
    // const tv2 = new Tv('华为电视', '100', '200','red')

    // console.log(tv1.start === tv2.start)

    // 判断实例对象是否属于某个构造函数
    // console.log(tv1 instanceof Phone)


    // 构造函数+原型模式
    function Tv(name, width, height, color) { 
      this.name = name
      this.width = width
      this.height = height
      this.color = color
    }

    // 给构造函数的原型对象添加方法
    Tv.prototype.start = function () {
      console.log(this.name, '电视开机')
    }

    // 实例对象
    const tv1 = new Tv('小米电视', '100', '200','red')
    const tv2 = new Tv('华为电视', '100', '200','red')

    console.log(tv1)
    // console.log(tv1.__proto__ === Tv.prototype)
    // console.log(tv1.__proto__.constructor === Tv)
    // console.log(tv1.__proto__ === tv2.__proto__)
    // console.log(tv1.start === tv2.start)
    // tv1.start()
    // tv2.start()

    
    // 原型链: 当访问对象的属性或者方法时，会先在对象自身查找，如果没有找到，会沿着原型链向上查找，如果找到就返回，如果没有找到就返回 undefined
    // 原型链的尽头 Object.prototype.__proto__ = null
    // console.log(tv1.toString())
    




    // function Phone() {

    // }
    // const phone1 = new Phone()
    // console.log(phone1.__proto__.construtor === Tv)







    

    






  </script>
</body>
</html>